home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suzy B Software 2
/
Suzy B Software CD-ROM 2 (1994).iso
/
extras
/
programm
/
detaz
/
execle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-27
|
1KB
|
71 lines
#include <stddef.h>
#include <osbind.h>
#include <mintbind.h>
#include <basepage.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
long execle(char *prg,...)
{
va_list args;
char *old_env = _pbase->p_env;
char *new_env;
char buf[256];
char *p,*q;
size_t size,work;
size = strlen(prg)+1;
va_start(args,prg);
while(p=va_arg(args,char *))
size += strlen(p+1);
va_end(args);
size+=6;
p = old_env;
while(*p)
p+=strlen(p)+1;
size += (p-old_env)+1;
if(size & 1) ++size;
if((new_env=malloc(size))==NULL)
exit(-100);
p = old_env;
q = new_env;
while(*p)
{
while(*q++=*p++) ;
}
p = "ARGV=";
while(*q++=*p++);
p = prg;
while(*q++=*p++);
va_start(args,prg);
while(p=va_arg(args,char *))
{
while(*q++ = *p++ );
}
*q++ = '\0';
*q = '\0';
va_end(args);
size = 0;
p = buf+1;
va_start(args,prg);
while(q=va_arg(args,char *))
{
work = strlen(q)+1;
if((size+work)>125)
break;
while(*p++ = *q++) ;
*p++ = ' ';
size+=work;
}
p[-1]='\0';
buf[0] = 127;
if(size=Pexec(200,prg,buf,new_env))
return size;
}